package com.base.core.error;


import com.base.core.util.StringUtils;

import java.util.Collection;


public abstract class Assert {

    /**
     * 不能为Null
     * @param value
     * @param name
     */
    public static void notNull(Object value, String name) {
        if (value == null) {
            throw ErrorUtils.wrap(GenericError.ILLEGAL_ARGUMENT, name + "不能为空");
        }
    }

    /**
     * 字符不能为空
     * @param value
     * @param name
     */
    public static void notEmpty(String value, String name) {
        if (StringUtils.isEmpty(value)) {
            throw ErrorUtils.wrap(GenericError.ILLEGAL_ARGUMENT, name + "不能为空");
        }
    }

    /**
     * 集合不能为空或者长度为0
     * @param value
     * @param name
     */
    public static void notEmpty(Collection<?> value, String name) {
        if (value == null || value.isEmpty()) {
            throw ErrorUtils.wrap(GenericError.ILLEGAL_ARGUMENT, name + "不能为空");
        }
    }

    /**
     * 数组不能为空或者长度为0
     * @param value
     * @param name
     */
    public static void notEmpty(Object[] value, String name) {
        if (value == null || value.length == 0) {
            throw ErrorUtils.wrap(GenericError.ILLEGAL_ARGUMENT, name + "不能为空");
        }
    }

    /**
     * 布尔值不能为True
     * @param value
     * @param name
     */
    public static void notTrue(boolean value, String name) {
        if (value) {
            throw ErrorUtils.wrap(GenericError.ILLEGAL_ARGUMENT, name + "不合理");
        }
    }

    /**
     * value1必须小于value2
     * @param value1
     * @param value2
     * @param name1
     * @param name2
     */
    public static <T extends Comparable<T>> void range(T value1, T value2, String name1, String name2) {
        if (value1 == null || value2 == null) {
            return;
        }

        if (value2.compareTo(value1) < 0) {
            throw ErrorUtils.wrap(GenericError.ILLEGAL_ARGUMENT, name1 + "必须小于" + name2);
        }
    }
}
